﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Styx.Helpers;
using System.IO;
using Styx;
using Styx.Common;
using System.ComponentModel;
using DefaultValue = Styx.Helpers.DefaultValueAttribute;
using Styx.TreeSharp;

namespace PalaProt
{
    public class CRSettingsProt : Settings
    {
        public static readonly CRSettingsProt myPrefs = new CRSettingsProt();

        public CRSettingsProt()
            : base(
                Path.Combine(Utilities.AssemblyDirectory,
                    string.Format(@"Routines/Settings/Config/Pasterke/{0}/PalaSettingsProt-{1}.xml", StyxWoW.Me.RealmName, StyxWoW.Me.Name))
                )
        {
        }

        public enum Keypress
        {
            NONE,
            LSHIFT,
            RSHIFT,
            LCTRL,
            RCTRL,
            LALT,
            RALT
        };

        [Setting]
        [DefaultValue(Keypress.NONE)]
        [Category("Extra's")]
        [DisplayName("Pause Aoe Key")]
        [Description("Pause Aoe Key")]
        public Keypress StopAoeKey { get; set; }

        [Setting]
        [DefaultValue(Keypress.NONE)]
        [Category("Extra's")]
        [DisplayName("Pause CR Key")]
        [Description("Pause CR Key")]
        public Keypress StopCRKey { get; set; }

        [Setting]
        [DefaultValue(true)]
        [Category("Extra's")]
        [DisplayName("Print Raidstyle Messages")]
        public bool PrintRaidstyleMsg { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Paladin")]
        [DisplayName("Virmen Potions")]
        [Description("Use Virmen Potions on Bossfights")]
        public bool useVirmenPotions { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Paladin")]
        [DisplayName("Lifeblood")]
        [Description("Use Lifeblood on Bossfights")]
        public bool useLifeblood { get; set; }

        [Setting]
        [DefaultValue(55)]
        [Category("Paladin")]
        [DisplayName("Healthstone HP %")]
        [Description("Use Healthstone below HP %")]
        public int useHealthstone { get; set; }
		
		//movement

        [Setting]
        [DefaultValue(false)]
        [Category("Movement")]
        [DisplayName("Auto Target")]
        [Description("Auto Target")]
        public bool AutoTargeting { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Movement")]
        [DisplayName("Movement")]
        [Description("Movement")]
        public bool AutoMovement { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Movement")]
        [DisplayName("Auto Facing")]
        [Description("Auto Facing")]
        public bool AutoFacing { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Movement in Raids, Instances, Dungeons")]
        [DisplayName("Disable Auto Move")]
        [Description("Disable Auto Movement in Raids, Instances, Dungeons")]
        public bool DisableAutoMovement { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Movement in Raids, Instances, Dungeons")]
        [DisplayName("Disable Auto Target")]
        [Description("Disable Auto Targeting in Raids, Instances, Dungeons")]
        public bool DisableAutoTargeting { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Movement in Raids, Instances, Dungeons")]
        [DisplayName("Disable Auto Facing")]
        [Description("Disable Auto Facing in Raids, Instances, Dungeons")]
        public bool DisableAutoFacing { get; set; }

        //resting
        [Setting]
        [DefaultValue(75)]
        [Category("Rest")]
        [DisplayName("Flash of Light HP %")]
        [Description("Flash of Light out of combat")]
        public int PercentFlashOfLight { get; set; }

        [Setting]
        [DefaultValue(45)]
        [Category("Rest")]
        [DisplayName("Eat Food HP %")]
        [Description("Eat food out of combat")]
        public int FoodPercent { get; set; }

        // trinkets section
        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 1")]
        [DisplayName("Auto use")]
        [Description("Auto use trinket 1")]
        public bool AutoTrinket1 { get; set; }

        [Setting]
        [DefaultValue(0)]
        [Category("Trinket 1")]
        [DisplayName("HP %")]
        [Description("Use trinket 1 below HP %")]
        public int trinket1hppercent { get; set; }

        [Setting]
        [DefaultValue(0)]
        [Category("Trinket 1")]
        [DisplayName("Mana %")]
        [Description("Use trinket 1 below Mana %")]
        public int trinket1Manapercent { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 1")]
        [DisplayName("Crowd Control")]
        [Description("Use trinket 1 when you are Crowd Controlled")]
        public bool trinket1crowdcontrolled { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 1")]
        [DisplayName("Dps boost")]
        [Description("Use trinket 1 as DPS boost")]
        public bool trinket1dpsboost { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 2")]
        [DisplayName("Auto use")]
        [Description("Auto use trinket 2")]
        public bool AutoTrinket2 { get; set; }

        [Setting]
        [DefaultValue(0)]
        [Category("Trinket 2")]
        [DisplayName("HP %")]
        [Description("Use trinket 2 below HP %")]
        public int trinket2hppercent { get; set; }

        [Setting]
        [DefaultValue(0)]
        [Category("Trinket 2")]
        [DisplayName("Mana %")]
        [Description("Use trinket 1 below Mana %")]
        public int trinket2Manapercent { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 2")]
        [DisplayName("Crowd Control")]
        [Description("Use trinket2 when you are Crowd Controlled")]
        public bool trinket2crowdcontrolled { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Trinket 2")]
        [DisplayName("Dps boost")]
        [Description("Use trinket 2 as DPS boost")]
        public bool trinket2dpsboost { get; set; }

        //Revive partymembers
        [Setting]
        [DefaultValue(false)]
        [Category("Symbiosis Rebirth")]
        [DisplayName("Auto Res Tank")]
        [Description("Auto Res Tank with Symbiosis Rebirth")]
        public bool AutoResTank { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Symbiosis Rebirth")]
        [DisplayName("Auto Res Healer")]
        [Description("Auto Res Healer Symbiosis Rebirth")]
        public bool AutoResHealer { get; set; }

        [Setting]
        [DefaultValue(55)]
        [Category("Protection")]
        [DisplayName("Healthstone HP %")]
        [Description("Use Healthstone below HP %")]
        public int PercentHealthstone { get; set; }

        [Setting]
        [DefaultValue(75)]
        [Category("Protection")]
        [DisplayName("Barkskin Symbiosis HP %")]
        [Description("Use Barkskin below HP %")]
        public int PercentBarkskin { get; set; }

        [Setting]
        [DefaultValue(35)]
        [Category("Protection")]
        [DisplayName("Ardent Defender HP %")]
        [Description("Use Ardent Defender below HP %")]
        public int PercentArdentDefender { get; set; }

        [Setting]
        [DefaultValue(50)]
        [Category("Protection")]
        [DisplayName("Guardian of Ancient Kings HP %")]
        [Description("Use Guardian of Ancient Kings below HP %")]
        public int PercentGuardianOfKings { get; set; }

        [Setting]
        [DefaultValue(20)]
        [Category("Protection")]
        [DisplayName("Lay on Hands HP %")]
        [Description("Use Lay on Hands below HP %")]
        public int PercentLayOnHands { get; set; }

        [Setting]
        [DefaultValue(15)]
        [Category("Protection")]
        [DisplayName("Divine Shield HP %")]
        [Description("Use Divine Shield below HP %")]
        public int PercentDivineShield { get; set; }

        [Setting]
        [DefaultValue(95)]
        [Category("Protection")]
        [DisplayName("Eternal Flame HP %")]
        [Description("Use Eternal Flame below HP %")]
        public int PercentEternalFlame { get; set; }

        [Setting]
        [DefaultValue(95)]
        [Category("Protection")]
        [DisplayName("Word of Glory HP %")]
        [Description("Use Word of Glory below HP %")]
        public int PercentWordOfGlory { get; set; }

        //Blessings

        [Setting]
        [DefaultValue(Blessings.Auto)]
        [Category("Paladin")]
        [DisplayName("Blessing")]
        [Description("Choose prefered Blessing")]
        public Blessings WhatBlessingNeeded { get; set; }



        public enum Blessings
        {
            Auto,
            Kings,
            Might,
            Manual
        }

        [Setting]
        [DefaultValue(false)]
        [Category("Paladin")]
        [DisplayName("Auto Interrupt")]
        [Description("Rebuke, War Stomp")]
        public bool AutoInterrupt { get; set; }

        [Setting]
        [DefaultValue(false)]
        [Category("Paladin")]
        [DisplayName("Auto Righteous Fury")]
        [Description("Auto buff Righteous Fury")]
        public bool AutoRighteousFury { get; set; }

        public enum Seal
        {
            Truth,
            Insight,
            Manual
        }

        [Setting]
        [DefaultValue(Seal.Insight)]
        [Category("Paladin")]
        [DisplayName("Seal of ")]
        [Description("Choose prefered Seal")]
        public Seal WhatSealNeeded { get; set; }
    }
}
